package cn.lxh.blog.controller;


import cn.lxh.blog.domain.Param;
import cn.lxh.blog.query.ParamQuery;
import cn.lxh.blog.service.IParamService;
import cn.lxh.util.JsonResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * ParamController控制器类
 */
@RestController // 该类交给spring管理, 并且返回JSON格式
@RequestMapping("/param") // 默认请求路径
@Api(tags = "参数接口类")
public class ParamController {

    @Autowired
    private IParamService paramService;
    
    /**
     * 查询所有参数
     *
     * @return
     */
    @GetMapping("/getParams")
    @ApiOperation("查询所有参数")
    public Map<String, Object> findAll() {
        return paramService.findAll();
    }

    /**
     * 根据id判断是添加还是修改
     *
     * @param param
     * @return
     */
    @PutMapping
    @ApiOperation("根据id判断是添加还是修改")
    public JsonResult addOrUpdate(@RequestBody Param param) { // 将前端JSON格式的数据转为Java对象
        try {
            if (param.getId() == null) {
                // 添加参数
                paramService.add(param);
            } else {
                // 修改参数
                paramService.update(param);
            }
            return JsonResult.success(); // 成功
        } catch (Exception e) {
            e.printStackTrace(); // 打印异常信息
            return JsonResult.error(); // 失败
        }
    }

    /**
     * 根据id删除参数
     *
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除参数")
    public JsonResult delete(@PathVariable("id") Long id) {
        try {
            // 根据id删除参数
            paramService.delete(id);
            return JsonResult.success(); // 成功
        } catch (Exception e) {
            e.printStackTrace(); // 打印异常信息
            return JsonResult.error(); // 失败
        }
    }

    /**
     * 根据id查询单个参数
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询单个参数")
    public Param findOne(@PathVariable("id") Long id) {
        return paramService.findOne(id);
    }

    /**
     * 查询所有参数
     *
     * @return
     */
    @GetMapping
    @ApiOperation("查询所有参数")
    public List<Param> getAll() {
        return paramService.getAll();
    }

    /**
     * 根据id批量删除参数
     *
     * @param ids
     * @return
     */
    @PatchMapping
    @ApiOperation("根据id批量删除参数")
    public JsonResult patchDelete(@RequestBody Long[] ids) {
        try {
            // 根据id批量删除参数
            System.out.println(ids);
            paramService.patchDelete(ids);
            return JsonResult.success(); // 成功
        } catch (Exception e) {
            e.printStackTrace(); // 打印异常信息
            return JsonResult.error(); // 失败
        }
    }

    /**
     * 分页查询
     *
     * @param paramQuery
     * @return
     */
    @PostMapping
    @ApiOperation("分页查询")
    public PageInfo<Param> queryPage(@RequestBody ParamQuery paramQuery) {
        return paramService.queryPage(paramQuery);
    }

}
